#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<sys/mman.h>
#include<string.h>

//32 位
//A   R   G    B
//24~31 16~23  8~15  0~7
#define RED 0xff0000
#define GREEN 0xff00
#define BLUE 0xff

//练习：让LCD上下分为三部分分别显示红绿蓝  左右显示红绿蓝

int main()
{
	int fd = open("/dev/fb0",O_RDWR);
	if(fd==-1){
		perror("open");
		return -1;
	}

	int *mmep = (int *)mmap(NULL,800*480*4,PROT_WRITE|PROT_READ,MAP_SHARED,fd,0);

	if(mmep==MAP_FAILED){
		perror("mmap");
		return -1;
	}

	//操作显存
	/*
	int i =0;
	for(i=0;i<800*480/3;i++){
		*(mmep+i)=RED;
	}

	for(;i<800*480*2/3;i++){
		*(mmep+i)=GREEN;
	}
	for(;i<800*480;i++){
		*(mmep+i)=BLUE;
	}*/

	int i = 0,j = 0; //i表示第几行，j表示第几列
	for(i=0;i<480;i++){
		for(j=0;j<800/3;j++){
			//第i行第j个
			*(mmep + i*800 + j)= RED|GREEN;
		}
		for(;j<800*2/3;j++){
			*(mmep + i*800 + j) = GREEN|BLUE;
		}
		for(;j<800;j++){
			*(meep + i*800 + j) = RED|BLUE;
		}
	}

	
	//解除映射
	munmap(mmep,800*480*4);

	close(fd);

	
	return 0;
}